(function (jq) {

    var requestUrl;

    // 为字符串创建format方法，用于字符串的格式化
    String.prototype.format = function (args) {
        return this.replace(/\{(\w+)\}/g, function (s, i) {
            return args[i];
        })
    };

    function init() {
        $.ajax({
            url: requestUrl,
            type: 'GET',
            dataType: 'JSON',
            success: function (arg) {
                if (arg.status == 100) {
                    createTable(arg.data.table_conf);
                    // 顺序不能乱
                    createBody(arg.data.table_conf, arg.data.data_list);
                } else {
                    alert(arg.msg);
                }
            }
        })
    }

    function createTable(config) {

        var tr = document.createElement('tr');
        $.each(config, function (k, v) {
            // display 控制显隐
            if (v.display) {
                var th = document.createElement('th');
                th.innerHTML = v.title;
                $(tr).append(th);
            }
        });
        $('#head').append(tr)
    }

    function createBody(tableConfig, dataList) {
        /*
        * dataList = [{'port': 11, 'hostname': 'c1.com'},{'port': 22, 'hostname': 'c2.com'}
        */
        /*
         tableConfig = [
               {
                   'q': 'hostname',
                    'title': '主机名',
                    'display': 1,
              },
        *       {
        *           'q': 'port',
                    'title': '端口',
                    'display': 1,
                },
                {
                    'q': None,
                    'title': '操作',
                    'display': 1,
                },
        * ]
        * */

        $.each(dataList, function (k1, row) {
            var tr = document.createElement('tr');
            $.each(tableConfig, function (k2, confitem) {
                if (confitem.display) {
                    var td = document.createElement('td');
                    // row = {'port': 11, 'hostname': 'c1.com'}
                    // td.innerHTML = row[confitem.q];


                    // 设置内容
                    var kwargs = {};
                    $.each(confitem.text.kwargs, function (key, value) {
                        if (value.startsWith('@')) {
                            var temp = value.substring(1, value.length);
                            kwargs[key] = row[temp];
                        } else {
                            kwargs[key] = value;
                        }
                    });
                    td.innerHTML = confitem.text.content.format(kwargs);


                    // 设置标签
                    $.each(confitem.attr, function (key, value) {
                        if (value.startsWith('@')) {
                            var temp = value.substring(1, value.length);
                            td.setAttribute(key, row[temp]);
                        } else {
                            td.setAttribute(key, value);
                        }
                    });

                    $(tr).append(td);
                }
            });
            $('#body').append(tr);
        });

    }

    // 加扩展，使外部可以调用该函数
    jq.extend({
        'init': function (url) {
            requestUrl = url;
            init();
        }
    })

})(jQuery);
